package com.yang.strategy;

import java.util.concurrent.TimeUnit;
import java.util.function.Function;

public interface CacheStrategy {

    /**
     * 添加缓存
     * @param key 缓存key
     * @param value 缓存value
     * @param time 过期时间
     * @param unit 时间单位
     * @param isLogicalExpire 是否逻辑过期
     */
    void setCache(String key, Object value, Long time, TimeUnit unit, boolean isLogicalExpire);

    /**
     * 获取缓存
     * @param keyPrefix 缓存前缀
     * @param id 缓存key
     * @param type 返回值类型
     * @param dbFallback 方法函数
     * @param time 过期时间
     * @param unit 时间单位
     * @param <R> 返回值泛型
     * @param <ID> 参数泛型
     * @return 缓存数据
     */
    <R,ID> R getCache(String keyPrefix, ID id, Class<R> type, Function<ID,R> dbFallback, Long time, TimeUnit unit);
}
